Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
problema programare Java
#1
Posted 20 August 2017 - 17:55
Salutare. Am o problema de programare de facut in Java aceasta fiind urmatoarea: sa se calculeze unghiurile unui triunghi dat prin coordonatele varfurilor. M-ar ajuta un raspuns si ce formula as putea aplica de geometrie. Multumesc frumos
|
#3
Posted 03 September 2017 - 11:59
adryan_2525, on 20 august 2017 - 17:55, said:
Salutare. Am o problema de programare de facut in Java aceasta fiind urmatoarea: sa se calculeze unghiurile unui triunghi dat prin coordonatele varfurilor. M-ar ajuta un raspuns si ce formula as putea aplica de geometrie. Multumesc frumos Salut ti-am facut repejor un mic programel care face ce vrei tu: import java.util.ArrayList; public class App { public static class Consola { public static void tipareste(Object obj){ System.out.println(obj); } } public static class Mesaje { public static final String DREAPTA_OBLICA = "dreapta oblica"; public static final String DREAPTA_VERTICALA = "dreapta verticala"; public static final String DREAPTA_ORIZONTALA = "dreapta orizontala"; } public class EroareTriunghi extends Exception { private static final long serialVersionUID = 1L; private String msg = ""; public EroareTriunghi(String msg) { this.msg = msg; } @Override public String getMessage() { return "[Eroare validare triunghi]: " + this.msg; } } public class Punct{ public int x = 0; public int y = 0; public Punct() {} public Punct(int x, int y ) { this.x = x; this.y = y; } } public class Dreapta{ public Punct A = new Punct(); public Punct B = new Punct(); public String pozitie = ""; public double panta = 0.0; public boolean estePantaValida = false; public String ecuatie = "y-yA = [(yB-yA)/(xB-xA)](x-xA)"; public double unghiInGradeCuAltaDreapta = 0.0; public Dreapta() {} public Dreapta(Punct A, Punct { this.A = A; this.B = B; if (this.A.x == this.B.x) { this.pozitie = Mesaje.DREAPTA_VERTICALA; this.ecuatie = "x = xA"; } else if (this.A.y == this.B.y) { this.pozitie = Mesaje.DREAPTA_ORIZONTALA; this.ecuatie = "y = yA"; this.estePantaValida = true; } else { this.pozitie = Mesaje.DREAPTA_OBLICA; this.estePantaValida = true; } this.ecuatie = this.ecuatie .replace("xA", "" + this.A.x) .replace("yA", "" + this.A.y) .replace("xB", "" + this.B.x) .replace("yB", "" + this.B.y); } public Dreapta calculUnghiCuAltaDreapta(Dreapta dreapta) { if (dreapta.estePantaValida && this.estePantaValida) { double raport = (dreapta.calculPanta() - this.calculPanta()) /(1.0 + dreapta.panta * this.panta); this.unghiInGradeCuAltaDreapta = Math.atan(Math.abs(raport)) * 180.0/Math.PI; } else { this.unghiInGradeCuAltaDreapta = 90.0; } return this; } private double calculPanta() { double result = 0.0; if(this.estePantaValida) { //(yB-yA)/(xB-xA) result = (this.B.y - this.A.y) * 1.0 / (this.B.x - this.A.x) * 1.0; } this.panta = result; return this.panta; } } public class triunghi { public double unghiA = 0.0; public double unghiB = 0.0; public double unghiC = 0.0; public Dreapta AB = new Dreapta(); public Dreapta BC = new Dreapta(); public Dreapta CA = new Dreapta(); public Triunghi(Dreapta AB, Dreapta BC, Dreapta CA) throws EroareTriunghi{ double unghiA = AB.calculUnghiCuAltaDreapta(BC).unghiInGradeCuAltaDreapta; double unghiB = BC.calculUnghiCuAltaDreapta(CA).unghiInGradeCuAltaDreapta; double unghiC = CA.calculUnghiCuAltaDreapta(AB).unghiInGradeCuAltaDreapta; boolean esteTriunghiulValid = (unghiA + unghiB + unghiC) <= 180.0; if (esteTriunghiulValid) { this.unghiA = unghiA; this.unghiB = unghiB; this.unghiC = unghiC; this.AB = AB; this.BC = BC; this.CA = CA; } else { throw new EroareTriunghi("dreptele nu formeaza un triunghi"); } } private String infoDreapta(String token, Dreapta dreapta) { return "<token> are ecuatia <ecuatie> cu panta = <panta>" .replace("<token>", token) .replace("<ecuatie>", dreapta.ecuatie) .replace("<panta>", dreapta.estePantaValida ? ("" + dreapta.panta) : "NEDEFINITA"); } private String infoUnghi(String tokenA, String pozitie, double unghi, String tokenB) { return "<tokenA> este <pozitie> si face un unghi de <unghi> grade cu <tokenB>" .replace("<tokenA>",tokenA) .replace("<pozitie>", pozitie) .replace("<unghi>","" + unghi) .replace("<tokenB>",tokenB); } public void genereazaRaportTriunghi() { class Element{ public String token = ""; public Dreapta dreapta = new Dreapta(); public String nextToken = ""; public double unghi = 0.0; public Element(String token, Dreapta dreapta, double unghi, String nextToken) { this.token = token; this.dreapta = dreapta; this.unghi = unghi; this.nextToken = nextToken; } } ArrayList<Element> list = new ArrayList<Element>(); list.add(new Element("dreapta AB", AB, this.unghiA, "dreapta BC")); list.add(new Element("dreapta BC", BC, this.unghiB, "dreapta CA")); list.add(new Element("dreapta CA", CA, this.unghiC, "dreapta AB")); list.forEach(elm->{ Consola.tipareste(this.infoDreapta(elm.token, elm.dreapta)); Consola.tipareste(this.infoUnghi(elm.token, elm.dreapta.pozitie, elm.unghi, elm.nextToken)); Consola.tipareste(""); }); } } public void run() { try { new Triunghi( new Dreapta(new Punct(20, 50), new Punct(90, 50)), new Dreapta(new Punct(12, 40), new Punct(90, 60)), new Dreapta(new Punct(10, 30), new Punct(35, 75)) ).genereazaRaportTriunghi(); } catch (EroareTriunghi errT) { Consola.tipareste(errT.getMessage()); } } public static void main(String[] args) { new App().run(); } }iar mai jos ai outputul pt un sample: dreapta AB are ecuatia y = 50 cu panta = 0.0 dreapta AB este dreapta orizontala si face un unghi de 14.381394591090602 grade cu dreapta BC dreapta BC are ecuatia y-40 = [(60-40)/(90-12)](x-12) cu panta = 0.2564102564102564 dreapta BC este dreapta oblica si face un unghi de 46.56400130983226 grade cu dreapta CA dreapta CA are ecuatia y-30 = [(75-30)/(35-10)](x-10) cu panta = 1.8 dreapta CA este dreapta oblica si face un unghi de 60.94539590092286 grade cu dreapta ABMult succes in studiere codului De asemeni ti-am atasat proiectelul din Eclipse ca sa-l poti rula ca sa studiezi work-flowul Ca breviar teoretic, programelul implementeaza urmatorul breviar matematic: bye Attached FilesEdited by Qupidqu, 03 September 2017 - 12:16. |
#4
Posted 03 September 2017 - 13:27
Erata:
programelul are o un bug, pe care l-am gasit mai tarziu: linia
boolean esteTriunghiulValid = (unghiA + unghiB + unghiC) <= 180.0;
se inlocuieste cu
boolean esteTriunghiulValid = ((int)(unghiA + unghiB + unghiC)) == 180;
Astfel pt datele de intrare new Triunghi( new Dreapta(new Punct(20, 50), new Punct(90, 50)), new Dreapta(new Punct(112, 40), new Punct(90, 60)), new Dreapta(new Punct(10, 30), new Punct(35, 75)) ).genereazaRaportTriunghi(); avem outputul: dreapta AB are ecuatia y = 50 cu panta = 0.0 dreapta AB este dreapta orizontala si face un unghi de 42.27368900609373 grade cu dreapta BC dreapta BC are ecuatia y-40 = [(60-40)/(90-112)](x-112) cu panta = -0.9090909090909091 dreapta BC este dreapta oblica si face un unghi de 76.78091509298342 grade cu dreapta CA dreapta CA are ecuatia y-30 = [(75-30)/(35-10)](x-10) cu panta = 1.8 dreapta CA este dreapta oblica si face un unghi de 60.94539590092286 grade cu dreapta AB Edited by Qupidqu, 03 September 2017 - 13:29. |
#5
Posted 04 September 2017 - 12:29
Multumesc pentru raspunsuri.
Eu intre timp am incercat sa fac rezolvarea ei pe hartie in felul urmator: Am calculat lungimea segmentelor AB,BC,AC conform datelor de intrare (x,y) https://imgur.com/Cn3DEDI Apoi am facut cosinus pentru fiecare unghi https://imgur.com/oZmu7rk Apoi am calculat arccosinus de unde mi-a rezultat unghiul fiecarui punct. Problema o am de facut pentru facultate la o materie cu numele de Programare Distribuita si trebuie sa o implementez prin anumite tehnologii si anume: Servlet, JSP, Sockets, RMI. |
#6
Posted 04 September 2017 - 14:55
adryan_2525, on 04 septembrie 2017 - 12:29, said:
Multumesc pentru raspunsuri. Eu intre timp am incercat sa fac rezolvarea ei pe hartie in felul urmator: Am calculat lungimea segmentelor AB,BC,AC conform datelor de intrare (x,y) https://imgur.com/Cn3DEDI Apoi am facut cosinus pentru fiecare unghi https://imgur.com/oZmu7rk Apoi am calculat arccosinus de unde mi-a rezultat unghiul fiecarui punct. Problema o am de facut pentru facultate la o materie cu numele de Programare Distribuita si trebuie sa o implementez prin anumite tehnologii si anume: Servlet, JSP, Sockets, RMI. Insta trebuie sa pui conditia ca (int) (arccosA + arccosB + arccosC) == 180ca sa formeze cele 3 drepte un triunghi. Apoi metoda poti s-o pui in clasa servletului pe care o sa-l faci , servlet ce o sa primeasca ca parametrii de request coordonatele punctelor via un GET deci clasa ta care va extinde clasa servlet va trebui sa-i faci override la metoda doGet(...), de unde vei citii param de request si ii vei introduce in metoda ta , de unde ii vei trimite fie catre un JSP via obiectului PrintWriter sau poti sa-i faci un JavaBean unde vei stoca rezultatul metodei,. Apoi metodele obiectului JavaBean vor putea fi accesate direct din JSP prin intermediul fie lui JSTL sau JSP-EL. PS: Cand o sa timp o sa-ti fac un mic exemplu de proiect in Java EE care face ce am zis mai sus, insa cu metoda gasita de tine. Proiectelul va folosi serverul Tomcat de la apache. Acum sunt prins in niste dead-lineuri dar cum scap de ele voi atasa proiectelul in Java EE , aici Toate cele bune. Edited by Qupidqu, 04 September 2017 - 14:57. |
#8
Posted 05 September 2017 - 10:15
#9
Posted 06 September 2017 - 02:43
adryan_2525, on 05 septembrie 2017 - 09:15, said:
Multumesc. O sa ma revansez fata de tine. [ https://i.imgur.com/XTw1h9u.png - Pentru incarcare in pagina (embed) Click aici ] Avand senzatia ca ar fi vreun triunghi, cand dreptele se intersecteaza doar intr-un punct. Poate n-ar fi rau sa te chinui tu ceva, decat sa ceri mura-n gura... Edited by IllusiveMan, 06 September 2017 - 02:44. |
#10
Posted 07 September 2017 - 10:06
Am reusit sa fac cate ceva in Netbeans dar dau de niste erori..
MyServlet.java import java.io.IOException; import static java.lang.Math.sqrt; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletOutputStream; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException { ServletOutputStream out=res.getOutputStream(); String ax=req.getParameter("ax"); String ay=req.getParameter("ay"); String bx=req.getParameter("bx"); String by=req.getParameter("by"); String cx=req.getParameter("cx"); String cy=req.getParameter("cy"); String mesaj_eroare = "Valorile introduse nu sunt valide"; double distantaAB = 0.0; double distantaBC = 0.0; double distantaAC = 0.0; double cosinusA = 0.0; double cosinusB = 0.0; double cosinusC = 0.0; MyServlet at = new MyServlet(); if(at.isTriangleValid(distantaAB, distantaBC, distantaAC)) { double unghiA = at.cosinusA(distantaAB, distantaBC, distantaAC); double unghiB = at.cosinusB(distantaAB, distantaBC, distantaAC); double unghiC = at.cosinusC(distantaAB, distantaBC, distantaAC); }else{ System.out.println("Valoride introduse nu formeaza un triunghi"); } res.setContentType("text/html"); out.println("<html>"); out.println("<head><title>Servlet</title></head>"); out.println("<body>"); out.println("<h2>Calculul unghiurilor unui triunghi</h2>"); out.println("<p>"); double unghiA = 0.1; out.println("Valoarea unghiului A este:" + unghiA); double unghiB = 0.0; out.println("Valoarea unghiului B este:" + unghiB); double unghiC = 0.0; out.println("Valoarea unghiului C este:" + unghiC); out.println("</p>"); out.println("<p>"); out.println(mesaj_eroare); out.println("</p>"); out.println("</body>"); out.println("</html>"); out.close(); } @Override public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ doGet(req,res); } private double distantaAB(double ax, double ay, double bx, double by) { double distantaAB = sqrt((bx-ax)*2+(by-ay)*2); return distantaAB; } private double distantaBC(double bx, double by, double cx, double cy) { double distantaBC = sqrt((cx-bx)*2+(cy-by)*2); return distantaBC; } private double distantaAC(double ax, double ay, double cx, double cy) { double distantaAC = sqrt((cx-ax)*2+(cy-ay)*2); return distantaAC; } private double cosinusA(double distantaAB, double distantaBC, double distantaAC) { double cosinusj = distantaBC * 2 + distantaAC * 2 - distantaAB * 2 / 2 * distantaBC * distantaAC; return Math.acos(Math.cos(cosinusj)); } private double cosinusB(double distantaAB, double distantaBC, double distantaAC) { double cosinusk = distantaAB * 2 + distantaAC * 2 - distantaBC * 2 / 2 * distantaAB * distantaAC; return Math.acos(Math.cos(cosinusk)); } private double cosinusC(double distantaAB, double distantaBC, double distantaAC) { double cosinusl = distantaBC * 2 + distantaAB * 2 - distantaAC * 2 / 2 * distantaAB * distantaBC; return Math.acos(Math.cos(cosinusl)); } private boolean isTriangleValid(double distantaAB, double distantaBC, double distantaAC) { if((distantaAB+distantaBC)>distantaAC && (distantaAB+distantaAC)>distantaBC && (distantaBC+distantaAC)>distantaAB) { return true; }else { return false; } } } index.html
<html>
<head>
<title> apache-tomcat Servlet-ul Calcul unghiuri </title>
</head>
<body >
<center>
<h1> Sa se calculeze unghiurile unui triunghi dat prin coordonatele varfurilor (SERVLET )</h1>
<h5> Introduceti coordonatele varfurilor </h5>
<form method="post" action="calculeaza">
<p>Introduceti coordonatele pct A*:
X<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="ax">
Y<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="ay">
<p>
<p>Introduceti coordonatele pct B*:
X<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="bx">
Y<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="by">
<p>
<p>Introduceti coordonatele pct C*:
X<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="cx">
Y<input type="text" pattern="^[1-9]{1}[0-9]*$" title="Introduceti un numar valid" name="cy">
<p>
<input type="submit" value="Calculeaza">
</form>
</center>
</body>
</html>
|
|
#11
Posted 07 September 2017 - 10:44
UPDATE
import java.io.IOException; import static java.lang.Math.sqrt; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletOutputStream; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException { ServletOutputStream out=res.getOutputStream(); String ax=req.getParameter("ax"); String ay=req.getParameter("ay"); String bx=req.getParameter("bx"); String by=req.getParameter("by"); String cx=req.getParameter("cx"); String cy=req.getParameter("cy"); String mesaj_eroare = "Valorile introduse nu sunt valide"; double distantaAB = 0; double distantaBC = 0; double distantaAC = 0; double cosinusA; double cosinusB; double cosinusC; double unghiA = 0; double unghiB = 0; double unghiC = 0; boolean calcul_reusit = isTriangleValid(distantaAB, distantaBC, distantaAC); if(calcul_reusit){ unghiA = cosinusA(distantaAB, distantaBC, distantaAC); unghiB = cosinusB(distantaAB, distantaBC, distantaAC); unghiC = cosinusC(distantaAB, distantaBC, distantaAC); } res.setContentType("text/html"); out.println("<html>"); out.println("<head><title>Servlet</title></head>"); out.println("<body>"); out.println("<h2>Calculul unghiurilor unui triunghi</h2>"); if(calcul_reusit){ out.println("<p>"); out.println("Valoarea unghiului A este:" + unghiA); out.println("Valoarea unghiului B este:" + unghiB); out.println("Valoarea unghiului C este:" + unghiC); out.println("</p>"); } else { out.println("<p>"); out.println(mesaj_eroare); out.println("</p>"); } out.println("</body>"); out.println("</html>"); out.close(); } @Override public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException{ doGet(req,res); } private double distantaAB(double ax, double ay, double bx, double by) { double distantaAB = sqrt((bx-ax)*2+(by-ay)*2); return distantaAB; } private double distantaBC(double bx, double by, double cx, double cy) { double distantaBC = sqrt((cx-bx)*2+(cy-by)*2); return distantaBC; } private double distantaAC(double ax, double ay, double cx, double cy) { double distantaAC = sqrt((cx-ax)*2+(cy-ay)*2); return distantaAC; } private double cosinusA(double distantaAB, double distantaBC, double distantaAC) { double cosinusj = distantaBC * 2 + distantaAC * 2 - distantaAB * 2 / 2 * distantaBC * distantaAC; return Math.acos(Math.cos(cosinusj)); } private double cosinusB(double distantaAB, double distantaBC, double distantaAC) { double cosinusk = distantaAB * 2 + distantaAC * 2 - distantaBC * 2 / 2 * distantaAB * distantaAC; return Math.acos(Math.cos(cosinusk)); } private double cosinusC(double distantaAB, double distantaBC, double distantaAC) { double cosinusl = distantaBC * 2 + distantaAB * 2 - distantaAC * 2 / 2 * distantaAB * distantaBC; return Math.acos(Math.cos(cosinusl)); } public static boolean isTriangleValid(double distantaAB, double distantaBC, double distantaAC) { if((distantaAB+distantaBC)>distantaAC && (distantaAB+distantaAC)>distantaBC && (distantaBC+distantaAC)>distantaAB) { return true; }else { return false; } } } |
#12
Posted 07 September 2017 - 10:57
la prima vedere :
functiile distantaAB, distantaBC, distantaAC fac acelasi lucru, deci nu ai nevoie de 3, plus ca nu sunt apelate nicaieri. |
#13
Posted 07 September 2017 - 11:07
adryan_2525, on 07 septembrie 2017 - 10:06, said:
Am reusit sa fac cate ceva in Netbeans dar dau de niste erori. romio79, on 07 septembrie 2017 - 10:57, said:
la prima vedere : functiile distantaAB, distantaBC, distantaAC fac acelasi lucru, deci nu ai nevoie de 3, plus ca nu sunt apelate nicaieri. Edited by Qupidqu, 07 September 2017 - 11:08. |
#14
Posted 07 September 2017 - 11:21
citeste codul inainte de a zice prostii. daca il citisei atunci nu are sens sa discut cu tine
|
#15
Posted 07 September 2017 - 11:22
Qupidqu, on 07 septembrie 2017 - 11:07, said:
Ce fel de erori ? De business-logic(calcul unghiurilor) sau de rulare a aplicatiei ? Sunt invocate de metoda doGet a servleltului care la randul sau este invocat conform URL path-ului din deployment-descriptorului aplicatiei. De business-logic. Nu urmez logica calculelor cum trebuie. |
|
#16
Posted 07 September 2017 - 11:33
adryan_2525, on 07 septembrie 2017 - 11:22, said:
De business-logic. Nu urmez logica calculelor cum trebuie. adryan_2525, on 07 septembrie 2017 - 11:22, said:
De business-logic. Nu urmez logica calculelor cum trebuie. deocamdata avem urmatoarea chestie : Quote
double distantaAB = 0; double distantaBC = 0; double distantaAC = 0; double cosinusA; double cosinusB; double cosinusC; double unghiA = 0; double unghiB = 0; double unghiC = 0; boolean calcul_reusit = isTriangleValid(distantaAB, distantaBC, distantaAC); Si ai pus asa doarece in codul sursa exista un pericol de confuzie, in sensul ca ai variabile independente care au acelasi nume cu numele unor metode care au intorc ca valori , variabile locale ce au acelasi nume cu al metodelor.Desi dpdv al compilerului chestia asta nu reprezinta nici un pericol, pentru factorul uman este, doarece nu permite sa faca distingerea clara cand trebuie sa foloseste variabila sau metoda, doarece au acelasi nume . etapa 1, cu urmatoarele modificari: double ax=Double.parseDouble(req.getParameter("ax")); double ay=rDouble.parseDouble(eq.getParameter("ay")); double bx=Double.parseDouble(req.getParameter("bx")); double by=Double.parseDouble(req.getParameter("by")); double cx=Double.parseDouble(eq.getParameter("cx")); double cy=Double.parseDouble(req.getParameter("cy")); double distantaAB = distantaAB(ax,ay, bx,by); double distantaBC =distantaBC(bx,by, cx,cy); double distantaAC = distantaAC(ax,ay, cx,cy); double cosinusA = cosinusA(distantaAB, distantaBC, distantaAC); double cosinusB = cosinusA(distantaAB, distantaBC, distantaAC); double cosinusA = cosinusA(distantaAB, distantaBC, distantaAC); double unghiA = 0; double unghiB = 0; double unghiC = 0; boolean calcul_reusit = isTriangleValid(distantaAB, distantaBC, distantaAC); if(calcul_reusit){ unghiA = cosinusA(distantaAB, distantaBC, distantaAC); unghiB = cosinusB(distantaAB, distantaBC, distantaAC); unghiC = cosinusC(distantaAB, distantaBC, distantaAC); } Edited by Qupidqu, 07 September 2017 - 11:46. |
#17
Posted 07 September 2017 - 11:51
#18
Posted 07 September 2017 - 12:24
am inteles, nu stii sa citesti codul, stii sa jignesti. e si asta un talent
|
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users